/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Persistencia;

import cprincipal.ambulancias;
import cprincipal.ambulanciaAerea;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class AmbulanciaAereaXmlAmbulatorio
{
    private Element root;
    private String fileLocation = "src/Archivos/ambulanciasAereasAmbulatorio.xml";

    public AmbulanciaAereaXmlAmbulatorio()
    {
        try
        {
            SAXBuilder builder = new SAXBuilder(false);
            Document doc = null;
            doc = builder.build(fileLocation);
            root = doc.getRootElement();
        }
        catch (JDOMException ex)
        {
            System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
        }
        catch (IOException ex)
        {
            System.out.println("No se pudo iniciar la operacion por: " + ex.getMessage());
        }
    }

    private Element AmbulanciaAereatoXmlElement(ambulanciaAerea nAerea)
    {
        Element ambulanciasTRA = new Element("aerea");

        Element cedulaConductor = new Element("cedulaConductor");
        cedulaConductor.setText(Integer.toString(nAerea.getCedulaConductor()));
        Element cedulaParamedico = new Element("cedulaParamedico");
         cedulaParamedico.setText(Integer.toString(nAerea.getCedulaParamedico()));
        Element cedulaParam = new Element("cedulaParam");
         cedulaParam.setText(Integer.toString(nAerea.getCedulaParamedico()));
        Element cedulaPaciente = new Element("cedulaPaciente");
        cedulaPaciente.setText(Integer.toString(nAerea.getCedulaPaciente()));
        Element  horaUsoAmbulancia = new Element ("horaUsoAmbulancia");
         horaUsoAmbulancia.setText(Integer.toString(nAerea.getHoraUsoAmbulancia()));
        Element  horaUltimoRescate = new Element ("horaUltimoRescate");
          horaUltimoRescate.setText(Integer.toString(nAerea.getHoraUltimoRescate()));
        Element  matricula = new Element ("matricula");
         matricula.setText(Integer.toString(nAerea.getMatricula()));
        Element  rescateRealizado = new Element ("rescateRealizado");
         rescateRealizado.setText(Integer.toString(nAerea.getRescateRealizado()));
          Element ambulanciasDisponibles = new Element("ambulanciasDisponibles");
        ambulanciasDisponibles.setText(Integer.toString(nAerea.getAmbulanciasDisponibles()));
         Element disponibilidad = new Element("disponibilidad");
        disponibilidad.setText(nAerea.getDisponibilidad());
        Element numeroTurbinas = new Element("numeroTurbinas");
         cedulaParam.setText(Integer.toString(nAerea.getNumeroTurbinas()));
        Element numeroAspas = new Element("numeroAspas");
        cedulaPaciente.setText(Integer.toString(nAerea.getNumeroAspas()));
        Element  color = new Element ("color");
         color.setText(nAerea.getColor());
        Element  caballaje = new Element ("caballaje");
          caballaje.setText(Integer.toString(nAerea.getCaballaje()));
        Element  anioConstruccion = new Element ("anioConstruccion");
         anioConstruccion.setText(Integer.toString(nAerea.getAnioConstruccion()));
        Element  fuselaje = new Element ("fuselaje");
         fuselaje.setText(Integer.toString(nAerea.getFuselaje()));
          Element  horasTotalesTurbina = new Element ("horasTotalesTurbina");
          horasTotalesTurbina.setText(Integer.toString(nAerea.getHorasTotalesTurbina()));
        Element  cantidadVueloTurbina = new Element ("cantidadVueloTurbina");
         cantidadVueloTurbina.setText(Integer.toString(nAerea.getCantidadVueloTurbina()));
        Element  horaTotalesAspas = new Element ("horaTotalesAspas");
         horaTotalesAspas.setText(Integer.toString(nAerea.getHoraTotalesAspas()));
          Element  cantidadVueloAspas = new Element ("cantidadVueloAspas");
          caballaje.setText(Integer.toString(nAerea.getCantidadVueloAspas()));
        Element  horasTotalesFuselaje = new Element ("horasTotalesFuselaje");
         horasTotalesFuselaje.setText(Integer.toString(nAerea.getHorasTotalesFuselaje()));
        Element  cantidadVueloFuselaje = new Element ("cantidadVueloFuselaje");
         cantidadVueloFuselaje.setText(Integer.toString(nAerea.getCantidadVueloFuselaje()));
             Element  infraestructura = new Element ("infraestructura");
         infraestructura.setText(nAerea.getInfraestructura());



        ambulanciasTRA.addContent(cedulaConductor);
        ambulanciasTRA.addContent(cedulaParamedico);
        ambulanciasTRA.addContent(cedulaParam);
        ambulanciasTRA.addContent(cedulaPaciente);
        ambulanciasTRA.addContent(horaUsoAmbulancia);
        ambulanciasTRA.addContent(horaUltimoRescate);
        ambulanciasTRA.addContent(matricula);
        ambulanciasTRA.addContent(rescateRealizado);
        ambulanciasTRA.addContent(ambulanciasDisponibles);
        ambulanciasTRA.addContent(disponibilidad);
        ambulanciasTRA.addContent(numeroTurbinas);
        ambulanciasTRA.addContent(numeroAspas);
        ambulanciasTRA.addContent(color);
        ambulanciasTRA.addContent(caballaje);
         ambulanciasTRA.addContent(anioConstruccion);
        ambulanciasTRA.addContent(fuselaje);
        ambulanciasTRA.addContent(horasTotalesTurbina);
        ambulanciasTRA.addContent(cantidadVueloTurbina);
        ambulanciasTRA.addContent(horaTotalesAspas);
        ambulanciasTRA.addContent(cantidadVueloAspas);
        ambulanciasTRA.addContent(horasTotalesFuselaje);
        ambulanciasTRA.addContent(cantidadVueloFuselaje);
         ambulanciasTRA.addContent(cantidadVueloFuselaje);
          ambulanciasTRA.addContent(infraestructura);

        return ambulanciasTRA;
    }

      private ambulanciaAerea ambulanciaAereaToObject(Element element) throws ParseException
      {
      ambulanciaAerea nAerea = new ambulanciaAerea ();

                 nAerea.setCedulaConductor(Integer.parseInt(element.getChildText("cedulaConductor")));
                 nAerea.setCedulaParamedico(Integer.parseInt(element.getChildText("cedulaParamedico")));
                 nAerea.setCedulaParam(Integer.parseInt(element.getChildText("cedulaParam")));
                 nAerea.setCedulaPaciente(Integer.parseInt(element.getChildText("cedulaPaciente")));
                 nAerea.setHoraUsoAmbulancia(Integer.parseInt(element.getChildText("horaUsoAmbulancia")));
                 nAerea.setHoraUltimoRescate(Integer.parseInt(element.getChildText("horaUltimoRescate")));
                 nAerea.setMatricula(Integer.parseInt(element.getChildText("matricula")));
                 nAerea.setRescateRealizado(Integer.parseInt(element.getChildText("rescateRealizado")));
                 nAerea.setAmbulanciasDisponibles(Integer.parseInt(element.getChildText("ambulanciasDisponibles")));
                 nAerea.setDisponibilidad(element.getChildText("disponibilidad"));
                 nAerea.setNumeroTurbinas(Integer.parseInt(element.getChildText("numeroTurbinas")));
                   nAerea.setNumeroAspas(Integer.parseInt(element.getChildText("numeroAspas")));
                 nAerea.setColor(element.getChildText("color"));
                 nAerea.setCaballaje(Integer.parseInt(element.getChildText("caballaje")));
                  nAerea.setAnioConstruccion(Integer.parseInt(element.getChildText("anioConstruccion")));
                 nAerea.setFuselaje(Integer.parseInt(element.getChildText("fuselaje")));
                 nAerea.setHorasTotalesTurbina(Integer.parseInt(element.getChildText("horasTotalesTurbina")));
                 nAerea.setCantidadVueloTurbina(Integer.parseInt(element.getChildText("cantidadVueloTurbina")));
                 nAerea.setHoraTotalesAspas(Integer.parseInt(element.getChildText("horaTotalesAspas")));
                 nAerea.setCantidadVueloAspas(Integer.parseInt(element.getChildText("cantidadVueloAspas")));
                 nAerea.setHorasTotalesFuselaje(Integer.parseInt(element.getChildText("horasTotalesFuselaje")));
                 nAerea.setCantidadVueloFuselaje(Integer.parseInt(element.getChildText("cantidadVueloFuselaje")));
                  nAerea.setInfraestructura(element.getChildText("infraestructura"));

           
        return nAerea;
    }

         public static Element buscar(List raiz, String dato, String hola) {
        Iterator i = raiz.iterator();
        while (i.hasNext()) {
            Element e = (Element) i.next();
            if (dato.equals(e.getChild("matricula").getText()) && hola.equals(e.getChild("infraestructura").getText())   ) {
                return e;
            }
        }
        return null;
    }


    private boolean updateDocument() {
        try {
            XMLOutputter out = new XMLOutputter(org.jdom.output.Format.getPrettyFormat());
            FileOutputStream file = new FileOutputStream(fileLocation);
            out.output(root, file);
            file.flush();
            file.close();
            return true;
        } catch (Exception e) {
            System.out.println("error: " + e.getMessage());
            return false;
        }
    }

    public boolean agregarAmbulanciaAerea(ambulanciaAerea nAerea) {
        boolean resultado = false;
        root.addContent(AmbulanciaAereatoXmlElement(nAerea));
        resultado = updateDocument();
        return resultado;
    }



 public ambulanciaAerea buscarAmbulanciaAerea(Integer dato, String hola) {
        Element aux = new Element("aerea");
        List Ambulancias = this.root.getChildren("aerea");

        while (aux != null) {
            aux = AmbulanciaAereaXmlAmbulatorio.buscar(Ambulancias,  Integer.toString(dato), hola);
            if (aux != null) {
                try {
                    return ambulanciaAereaToObject(aux);
                } catch (ParseException ex) {
                    System.out.println(ex.getMessage());
                }
            }
        }
        return null;
    }

  public boolean actualizarAmbulanciaAerea(ambulanciaAerea nAerea) {
        boolean resultado = false;
        Element aux = new Element("aerea");
        List Ambulancias = this.root.getChildren("aerea");
        while (aux != null) {
            aux = AmbulanciaAereaXmlAmbulatorio.buscar(Ambulancias, Integer.toString(nAerea.getMatricula()), nAerea.getInfraestructura());
            if (aux != null) {
                Ambulancias.remove(aux);
                resultado = updateDocument();
            }
        }
        agregarAmbulanciaAerea(nAerea);
        return resultado;
    }

  
     public ArrayList<ambulanciaAerea> todasLasAmbulanciasAereas() {
        ArrayList<ambulanciaAerea> resultado = new ArrayList<ambulanciaAerea>();
        for (Object it : root.getChildren()) {
            Element xmlElem = (Element) it;
            try {
                resultado.add(ambulanciaAereaToObject(xmlElem));
            } catch (ParseException ex) {
                System.out.println(ex.getMessage());
            }
        }
        return resultado;
    }
}

